import { compileToFunction } from "./compiler";
import { mountComponent } from "./lifecycle";
import { initState } from "./state";
// 给Vue增加init方法
export function initMixin(Vue) {
  Vue.prototype._init = function (options) {
    const vm = this;
    vm.$options = options; //将用户的选项挂载到实例上

    // 初始化状态
    initState(vm);

    if (options.el) {
      vm.$mount(options.el); //实现数据的挂载
    }
  };

  Vue.prototype.$mount = function (el) {
    const vm = this;
    el = document.querySelector(el);
    let ops = vm.$options;
    if (!ops.render) {
      let template;
      if (!ops.template && el) {
        template = el.outerHTML;
      } else {
        if (el) {
          template = ops.template;
        }
      }
      if (template&&el) {
        // 对模板进行编译
        const render = compileToFunction(template)
        ops.render = render;
      } 
    }
    mountComponent(vm,el) //组件的挂载
    // scriot标签引用的vue.global.js 这个编译过程是在浏览器运行的
    // runtime是不包含模板编译的，整个编译是打包的时候通过loader来转义.vue文件的,用runtime的时候 不能使用template
  };
}
